// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * MPC8568E MDS Device Tree Source
 *
 * Copyright 2007, 2008 Freescale Semiconductor Inc.
 */

/include/ "mpc8568si-pre.dtsi"

/ {
	model = "MPC8568EMDS";
	compatible = "MPC8568EMDS", "MPC85xxMDS";

	aliases {
		pci0 = &pci0;
		pci1 = &pci1;
		rapidio0 = &rio;
	};

	memory {
		device_type = "memory";
		reg = <0x0 0x0 0x0 0x0>;
	};

	lbc: localbus@e0005000 {
		reg = <0x0 0xe0005000 0x0 0x1000>;
		ranges = <0x0 0x0 0xfe000000 0x02000000
			  0x1 0x0 0xf8000000 0x00008000
			  0x2 0x0 0xf0000000 0x04000000
			  0x4 0x0 0xf8008000 0x00008000
			  0x5 0x0 0xf8010000 0x00008000>;

		nor@0,0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "cfi-flash";
			reg = <0x0 0x0 0x02000000>;
			bank-width = <2>;
			device-width = <2>;
		};

		bcsr@1,0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "fsl,mpc8568mds-bcsr";
			reg = <1 0 0x8000>;
			ranges = <0 1 0 0x8000>;

			bcsr5: gpio-controller@11 {
				#gpio-cells = <2>;
				compatible = "fsl,mpc8568mds-bcsr-gpio";
				reg = <0x5 0x1>;
				gpio-controller;
			};
		};

		pib@4,0 {
			compatible = "fsl,mpc8568mds-pib";
			reg = <4 0 0x8000>;
		};

		pib@5,0 {
			compatible = "fsl,mpc8568mds-pib";
			reg = <5 0 0x8000>;
		};
	};

	soc: soc8568@e0000000 {
		ranges = <0x0 0x0 0xe0000000 0x100000>;

		i2c-sleep-nexus {
			i2c@3000 {
				rtc@68 {
					compatible = "dallas,ds1374";
					reg = <0x68>;
					interrupts = <3 1 0 0>;
				};
			};
		};

		enet0: ethernet@24000 {
			tbi-handle = <&tbi0>;
			phy-handle = <&phy2>;
		};

		mdio@24520 {
			phy0: ethernet-phy@7 {
				interrupts = <1 1 0 0>;
				reg = <0x7>;
			};
			phy1: ethernet-phy@1 {
				interrupts = <2 1 0 0>;
				reg = <0x1>;
			};
			phy2: ethernet-phy@2 {
				interrupts = <1 1 0 0>;
				reg = <0x2>;
			};
			phy3: ethernet-phy@3 {
				interrupts = <2 1 0 0>;
				reg = <0x3>;
			};
			tbi0: tbi-phy@11 {
				reg = <0x11>;
				device_type = "tbi-phy";
			};
		};

		enet1: ethernet@25000 {
			tbi-handle = <&tbi1>;
			phy-handle = <&phy3>;
			sleep = <&pmc 0x00000040>;
		};

		mdio@25520 {
			tbi1: tbi-phy@11 {
				reg = <0x11>;
				device_type = "tbi-phy";
			};
		};

		par_io@e0100 {
			num-ports = <7>;

			pio1: ucc_pin@1 {
				pio-map = <
			/* port  pin  dir  open_drain  assignment  has_irq */
					0x4  0xa  0x1  0x0  0x2  0x0 	/* TxD0 */
					0x4  0x9  0x1  0x0  0x2  0x0 	/* TxD1 */
					0x4  0x8  0x1  0x0  0x2  0x0 	/* TxD2 */
					0x4  0x7  0x1  0x0  0x2  0x0 	/* TxD3 */
					0x4  0x17  0x1  0x0  0x2  0x0 	/* TxD4 */
					0x4  0x16  0x1  0x0  0x2  0x0 	/* TxD5 */
					0x4  0x15  0x1  0x0  0x2  0x0 	/* TxD6 */
					0x4  0x14  0x1  0x0  0x2  0x0 	/* TxD7 */
					0x4  0xf  0x2  0x0  0x2  0x0 	/* RxD0 */
					0x4  0xe  0x2  0x0  0x2  0x0 	/* RxD1 */
					0x4  0xd  0x2  0x0  0x2  0x0 	/* RxD2 */
					0x4  0xc  0x2  0x0  0x2  0x0 	/* RxD3 */
					0x4  0x1d  0x2  0x0  0x2  0x0 	/* RxD4 */
					0x4  0x1c  0x2  0x0  0x2  0x0 	/* RxD5 */
					0x4  0x1b  0x2  0x0  0x2  0x0 	/* RxD6 */
					0x4  0x1a  0x2  0x0  0x2  0x0 	/* RxD7 */
					0x4  0xb  0x1  0x0  0x2  0x0 	/* TX_EN */
					0x4  0x18  0x1  0x0  0x2  0x0 	/* TX_ER */
					0x4  0x10  0x2  0x0  0x2  0x0 	/* RX_DV */
					0x4  0x1e  0x2  0x0  0x2  0x0 	/* RX_ER */
					0x4  0x11  0x2  0x0  0x2  0x0 	/* RX_CLK */
					0x4  0x13  0x1  0x0  0x2  0x0 	/* GTX_CLK */
					0x1  0x1f  0x2  0x0  0x3  0x0>;	/* GTX125 */
			};

			pio2: ucc_pin@2 {
				pio-map = <
			/* port  pin  dir  open_drain  assignment  has_irq */
					0x5  0xa 0x1  0x0  0x2  0x0   /* TxD0 */
					0x5  0x9 0x1  0x0  0x2  0x0   /* TxD1 */
					0x5  0x8 0x1  0x0  0x2  0x0   /* TxD2 */
					0x5  0x7 0x1  0x0  0x2  0x0   /* TxD3 */
					0x5  0x17 0x1  0x0  0x2  0x0   /* TxD4 */
					0x5  0x16 0x1  0x0  0x2  0x0   /* TxD5 */
					0x5  0x15 0x1  0x0  0x2  0x0   /* TxD6 */
					0x5  0x14 0x1  0x0  0x2  0x0   /* TxD7 */
					0x5  0xf 0x2  0x0  0x2  0x0   /* RxD0 */
					0x5  0xe 0x2  0x0  0x2  0x0   /* RxD1 */
					0x5  0xd 0x2  0x0  0x2  0x0   /* RxD2 */
					0x5  0xc 0x2  0x0  0x2  0x0   /* RxD3 */
					0x5  0x1d 0x2  0x0  0x2  0x0   /* RxD4 */
					0x5  0x1c 0x2  0x0  0x2  0x0   /* RxD5 */
					0x5  0x1b 0x2  0x0  0x2  0x0   /* RxD6 */
					0x5  0x1a 0x2  0x0  0x2  0x0   /* RxD7 */
					0x5  0xb 0x1  0x0  0x2  0x0   /* TX_EN */
					0x5  0x18 0x1  0x0  0x2  0x0   /* TX_ER */
					0x5  0x10 0x2  0x0  0x2  0x0   /* RX_DV */
					0x5  0x1e 0x2  0x0  0x2  0x0   /* RX_ER */
					0x5  0x11 0x2  0x0  0x2  0x0   /* RX_CLK */
					0x5  0x13 0x1  0x0  0x2  0x0   /* GTX_CLK */
					0x1  0x1f 0x2  0x0  0x3  0x0   /* GTX125 */
					0x4  0x6 0x3  0x0  0x2  0x0   /* MDIO */
					0x4  0x5 0x1  0x0  0x2  0x0>; /* MDC */
			};
		};
	};

	qe: qe@e0080000 {
		ranges = <0x0 0x0 0xe0080000 0x40000>;
		reg = <0x0 0xe0080000 0x0 0x480>;

		spi@4c0 {
			mode = "cpu";
		};

		spi@500 {
			mode = "cpu";
		};

		enet2: ucc@2000 {
			device_type = "network";
			compatible = "ucc_geth";
			local-mac-address = [ 00 00 00 00 00 00 ];
			rx-clock-name = "none";
			tx-clock-name = "clk16";
			pio-handle = <&pio1>;
			phy-handle = <&phy0>;
			phy-connection-type = "rgmii-id";
		};

		enet3: ucc@3000 {
			device_type = "network";
			compatible = "ucc_geth";
			local-mac-address = [ 00 00 00 00 00 00 ];
			rx-clock-name = "none";
			tx-clock-name = "clk16";
			pio-handle = <&pio2>;
			phy-handle = <&phy1>;
			phy-connection-type = "rgmii-id";
		};

		mdio@2120 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x2120 0x18>;
			compatible = "fsl,ucc-mdio";

			/* These are the same PHYs as on
			 * gianfar's MDIO bus */
			qe_phy0: ethernet-phy@7 {
				interrupt-parent = <&mpic>;
				interrupts = <1 1 0 0>;
				reg = <0x7>;
			};
			qe_phy1: ethernet-phy@1 {
				interrupt-parent = <&mpic>;
				interrupts = <2 1 0 0>;
				reg = <0x1>;
			};
			qe_phy2: ethernet-phy@2 {
				interrupt-parent = <&mpic>;
				interrupts = <1 1 0 0>;
				reg = <0x2>;
			};
			qe_phy3: ethernet-phy@3 {
				interrupt-parent = <&mpic>;
				interrupts = <2 1 0 0>;
				reg = <0x3>;
			};
		};
	};

	pci0: pci@e0008000 {
		reg = <0x0 0xe0008000 0x0 0x1000>;
		ranges = <0x2000000 0x0 0x80000000 0x0 0x80000000 0x0 0x20000000
			  0x1000000 0x0 0x00000000 0x0 0xe2000000 0x0 0x800000>;
		clock-frequency = <66666666>;
		interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
		interrupt-map = <
			/* IDSEL 0x12 AD18 */
			0x9000 0x0 0x0 0x1 &mpic 0x5 0x1 0 0
			0x9000 0x0 0x0 0x2 &mpic 0x6 0x1 0 0
			0x9000 0x0 0x0 0x3 &mpic 0x7 0x1 0 0
			0x9000 0x0 0x0 0x4 &mpic 0x4 0x1 0 0

			/* IDSEL 0x13 AD19 */
			0x9800 0x0 0x0 0x1 &mpic 0x6 0x1 0 0
			0x9800 0x0 0x0 0x2 &mpic 0x7 0x1 0 0
			0x9800 0x0 0x0 0x3 &mpic 0x4 0x1 0 0
			0x9800 0x0 0x0 0x4 &mpic 0x5 0x1 0 0>;
	};

	/* PCI Express */
	pci1: pcie@e000a000 {
		ranges = <0x2000000 0x0 0xa0000000 0x0 0xa0000000 0x0 0x10000000
			  0x1000000 0x0 0x00000000 0x0 0xe2800000 0x0 0x800000>;
		reg = <0x0 0xe000a000 0x0 0x1000>;
		pcie@0 {
			ranges = <0x2000000 0x0 0xa0000000
				  0x2000000 0x0 0xa0000000
				  0x0 0x10000000

				  0x1000000 0x0 0x0
				  0x1000000 0x0 0x0
				  0x0 0x800000>;
		};
	};

	rio: rapidio@e00c00000 {
		reg = <0x0 0xe00c0000 0x0 0x20000>;
		port1 {
			ranges = <0x0 0x0 0x0 0xc0000000 0x0 0x20000000>;
		};
	};

	leds {
		compatible = "gpio-leds";

		green {
			gpios = <&bcsr5 1 0>;
		};

		amber {
			gpios = <&bcsr5 2 0>;
		};

		red {
			gpios = <&bcsr5 3 0>;
		};
	};
};

/include/ "mpc8568si-post.dtsi"
